package com.ld.tool.service.tool;

import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.springframework.core.io.Resource;
import org.springframework.stereotype.Service;

import com.ld.common.service.ProjectBasicService;
import com.ld.shieldsb.common.core.io.ResourceUtils;
import com.ld.shieldsb.common.core.util.StringUtils;
import com.ld.tool.model.tool.SqlFileModel;
import com.ld.tool.model.tool.SqlFileGroupSourceModel;

import lombok.extern.slf4j.Slf4j;

/**
 * 
 * 读取Readme.md的服务类，@Service注解用于自动注入
 * 
 * @author <a href="mailto:donggongai@126.com" target="_blank">吕凯</a>
 * @date 2019年10月24日 上午8:46:45
 *
 */
@Service
@Slf4j
public class SqlFileService extends ProjectBasicService {

    /**
     * 获取sql目录下的sql文件
     * 
     * @Title getReadmeMDs
     * @author 吕凯
     * @date 2019年11月06日 上午11:10:45
     * @return List<String>
     */
    public List<SqlFileModel> getSqls() {
//      File menuDir = new File(PathUtil.getClassRootPath(), "/static/images/menu/"); // 打成jar包时获取不到，需要另外处理
//      List<String> menuFiles = Arrays.asList(menuDir.list());
        List<SqlFileModel> files = new ArrayList<>();
        Resource[] resources = ResourceUtils.getResources("classpath*:**/sql/**/*.sql");
        for (Resource resource : resources) {
            try {
                SqlFileModel model = new SqlFileModel();
                URL url = resource.getURL();
                String path = url.getPath();
                String title = resource.getFilename();
                String resourcePath = StringUtils.substringBefore(path, "!");
                String simpleResourcePath = StringUtils.substringAfterLast(resourcePath, "/"); // 资源路径，只保留jar包
                path = "/sql/" + StringUtils.substringAfter(path, "/sql/");
                model.setSource(simpleResourcePath);
                model.setPath(path);
                model.setFileName(title);
                files.add(model);
            } catch (IOException e) {
                log.error("", e);
            }
        }
        return files;
    }

    /**
     * 按照来源（jar包）分组获取sql文件
     * 
     * @Title getSqlsGroupBySource
     * @author 吕凯
     * @date 2019年11月6日 下午1:54:57
     * @return List<SqlFileSourceModel>
     */
    public List<SqlFileGroupSourceModel> getSqlsGroupBySource() {
        List<SqlFileModel> files = getSqls();
        List<SqlFileGroupSourceModel> sources = new ArrayList<>();
        for (SqlFileModel resource : files) {
            SqlFileGroupSourceModel source = new SqlFileGroupSourceModel();
            source.setSource(resource.getSource());
            int index = sources.indexOf(source);
            if (index >= 0) {
                source = sources.get(index);
            } else {
                sources.add(source);
            }
            if (source.getFiles() == null) {
                source.setFiles(new ArrayList<>());
            }
            source.getFiles().add(resource);
        }
        return sources;
    }

    /**
     * 打开sql文件，返回文件内容
     * 
     * @Title openSqls
     * @author 吕凯
     * @date 2019年11月6日 下午1:55:30
     * @param filePath
     * @return String
     */
    public String openSqls(String filePath) {
        return getCreateTableSql(filePath);
    }
}
